iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
Software Development

從零開始學 Python系列 第 19

Day 19 – 自訂模組與簡單封裝

  • 分享至 

  • xImage
  •  

今天的學習重點

  • 什麼是模組(Module)
  • 如何建立並匯入「自訂模組」
  • name == "main" 的用途
  • 將程式分檔:讓主程式與工具程式分開

一、什麼是模組?

模組(Module)其實就是一個 Python 檔案(.py),裡面放了變數、函式或類別。透過 import,就能在其他程式中使用它的功能。
好處:

  • 讓程式碼更乾淨,容易維護。
  • 可重複使用(避免複製貼上相同程式)。
  • 讓專案有結構,不會一個檔案塞爆。

二、建立並使用自訂模組

step 1: 建立一個 mymath.py

# mymath.py
def add(a, b):
    return a + b

def sub(a, b):
    return a - b

螢幕擷取畫面 2025-08-21 120011

step 2: 在主程式 main.py 使用它

import mymath   # 匯入自訂模組

print(mymath.add(10, 5))   
print(mymath.sub(10, 5))   

螢幕擷取畫面 2025-08-21 120102

執行結果:
螢幕擷取畫面 2025-08-21 120159
我們把「運算邏輯」獨立出來,讓主程式專心處理流程。

三、模組別名與特定匯入

import mymath as mm
print(mm.add(3, 7))  

from mymath import sub
print(sub(9, 4))     
  • as → 幫模組取別名
  • from … import … → 只匯入需要的函式
    螢幕擷取畫面 2025-08-21 120540

四、name == "main" 技巧

有時候模組不只給別人用,自己也能單獨執行。
判斷:

# mymath.py
def add(a, b):
    return a + b

def sub(a, b):
    return a - b

if __name__ == "__main__":
    print("測試模組功能:")
    print(add(2, 3))  
    print(sub(7, 4))   

如果直接執行 python mymath.py → 會跑測試區塊
如果被其他程式 import mymath → 測試區塊不會執行
螢幕擷取畫面 2025-08-21 121122
(無測試區塊)
螢幕擷取畫面 2025-08-21 121327
!!注意!!
main 並不是指 main.py 這個檔名,而是「程式的入口點」的意思
在這個範例中 main 是指 mymath.py

五、簡單封裝的概念

所謂「封裝」,就是把功能收進模組(甚至是類別)裡,讓「主程式」更乾淨,只有流程,不用看到一堆細節。
範例:BMI 工具包

def bmi(weight, height):
    return weight / (height ** 2)
# main.py
import mymath

print("BMI =", round(mymath.bmi(48, 1.68), 2))

螢幕擷取畫面 2025-08-21 122057

學習心得

今天我學會如何建立自訂模組,體會到程式設計不只是「把功能寫出來」,更重要的是「結構化」與「重複利用」。就像生活收納一樣,東西要有自己的抽屜才方便整理,不然桌面會越來越亂。程式如果沒有拆模組,所有功能都堆在同一個檔案裡,很快就會變得難以維護。
這也讓我想到之前在寫 Java 的時候,因為同時存在 class 與 package 兩層結構,常常會混淆要怎麼正確呼叫。像是一個 class 在某個 package 裡,常常會搞不清楚要先 import package,還是直接去呼叫 class。那種「到底是用這層還是那層」的困惑,讓我對 Java 真的避之唯恐不及! Python 的模組與套件比較單一,一個 .py 檔就是模組,少了那種「到底現在該呼叫誰」的猶豫!雖然還沒完全熟練,但我開始能感覺到把程式切成模組的一目了然,未來回頭看會更輕鬆!
明天要學列表生成式(List Comprehension)!是一種快速寫法,能讓我們用一行程式就完成建構列表的動作,就像是把迴圈壓縮進一行程式碼裡,感覺很厲害!


上一篇
Day 18 – with open: 讀寫檔案
下一篇
Day 20 – 列表生成式(List Comprehension)
系列文
從零開始學 Python30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言